﻿using System;
namespace sy3_3
{
    #region 矩形基类Rect（文档1-43、1-52、1-53要求）
    class Rect
    {
        // 受保护数据成员：长、宽（允许派生类Cuboid访问，文档1-53要求）
        protected float length, width;

        // 1. 默认构造函数（重载需求，文档1-53要求“重载一个默认的构造函数”）
        public Rect()
        {
        }

        // 2. 带参构造函数：为长、宽赋初值（文档1-53要求）
        public Rect(float l, float w)
        {
            this.length = l;
            this.width = w;
        }

        // 3. 求矩形面积（virtual修饰，允许派生类重写，文档1-53、1-54要求）
        public virtual float GetArea()
        {
            return length * width;
        }

        // 4. 求矩形周长（文档1-53要求）
        public float GetPerimeter()
        {
            return 2 * (length + width);
        }
    }
    #endregion

    #region 长方体派生类Cuboid（继承自Rect，文档1-43、1-54要求）
    class Cuboid : Rect
    {
        // 新增私有数据成员：矩体的高（文档1-54要求）
        private float height;

        // 带参构造函数：初始化长、宽（调用基类构造）和高（文档1-54要求）
        public Cuboid(float l, float w, float h) : base(l, w)
        {
            this.height = h;
        }

        // 重写基类GetArea()：计算矩体表面积（文档1-54要求“方法重写形式求表面积”）
        public override float GetArea()
        {
            return 2 * (length * width + length * height + width * height);
        }

        // 求矩体体积（文档1-54要求）
        public float GetVolume()
        {
            return length * width * height;
        }
    }
    #endregion

    #region 主程序类（应用Rect与Cuboid类，文档1-55、1-58要求）
    class Program
    {
        static void Main(string[] args)
        {
            float rectLength, rectWidth, cuboidHeight;

            // 输入矩形长（匹配文档1-58实验图3-5输入流程）
            Console.Write("请输入矩形长:");
            rectLength = float.Parse(Console.ReadLine());

            // 输入矩形宽
            Console.Write("请输入矩形宽:");
            rectWidth = float.Parse(Console.ReadLine());

            // 计算并输出矩形结果（匹配文档1-58输出格式）
            Rect rect = new Rect(rectLength, rectWidth);
            Console.WriteLine($"解:矩形面积为{rect.GetArea()},周长为{rect.GetPerimeter()}。");

            // 输入矩体高（文档1-58要求“在此基础上构造矩体”）
            Console.WriteLine("===-在此基础上构造矩体===");
            Console.Write("请输入矩体高:");
            cuboidHeight = float.Parse(Console.ReadLine());

            // 计算并输出矩体结果（匹配文档1-58输出格式）
            Cuboid cuboid = new Cuboid(rectLength, rectWidth, cuboidHeight);
            Console.WriteLine($"解:矩体表面积为{cuboid.GetArea()},体积为{cuboid.GetVolume()}。");

            // 防止控制台闪退（文档1-34类似交互逻辑）
            Console.Write("按任意键结束程序:");
            Console.ReadKey();
        }
    }
    #endregion
}